/**
 * 
 */
package br.com.skynix.tcmc.controller.cadastros.contas;

import java.util.Collection;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.model.LazyDataModel;
import org.springframework.stereotype.Controller;

import br.com.skynix.tcmc.base.managedbeans.AbstractCRUDManagedBean;
import br.com.skynix.tcmc.base.managedbeans.AbstractDataProvider;
import br.com.skynix.tcmc.base.spring.IServiceAuditavel;
import br.com.skynix.tcmc.model.conta.ClassificacaoConta;
import br.com.skynix.tcmc.model.conta.Conta;
import br.com.skynix.tcmc.model.conta.Setor;
import br.com.skynix.tcmc.model.enumeration.TipoContaEnum;
import br.com.skynix.tcmc.model.enumeration.UnidadeFederativaEnum;
import br.com.skynix.tcmc.service.cadastros.contas.ContaService;
import br.com.skynix.tcmc.service.configuracao.geral.classificacoes_contas.ClassificacaoContaService;
import br.com.skynix.tcmc.service.configuracao.geral.setores.SetorService;

/**
 * @author davi
 * 
 */
@ManagedBean
@RequestScoped
@Controller
public class ContaMB extends AbstractCRUDManagedBean<Conta> {
	@Resource
	private ContaService contaService;

	@Resource
	private SetorService setorService;

	@Resource
	private ClassificacaoContaService classificacaoContaService;

	private TipoContaEnum tipoConta;

	private LazyDataModel<Conta> contasRelacionaveisDataProvider;

	private Conta contaRelacionavelSelecionada;

	/**
	 * 
	 */
	public ContaMB() {
		super();
		contasRelacionaveisDataProvider = new AbstractDataProvider<Conta>() {

			@Override
			protected IServiceAuditavel<Conta> getService() {
				return contaService;
			}

			@Override
			protected Conta getModelo() {
				return criarInstanciaPadraoModelo();
			}
		};
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.managedbeans.AbstractCRUDManagedBean#
	 * getClassePersistente()
	 */
	@Override
	protected Class<Conta> getClassePersistente() {
		return Conta.class;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.managedbeans.AbstractCRUDManagedBean#getService()
	 */
	@Override
	protected IServiceAuditavel<Conta> getService() {
		return contaService;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.managedbeans.AbstractCRUDManagedBean#
	 * getPathParaModuloCRUD()
	 */
	@Override
	protected String getPathParaModuloCRUD() {
		return formatPath("cadastros/contas/conta_crud_view");
	}

	public List<Setor> getListaSetor() {
		return setorService.listarTodos();
	}

	public List<ClassificacaoConta> getListaClassificacaoConta() {
		return classificacaoContaService.listarTodos();
	}

	public Collection<UnidadeFederativaEnum> getListaUF() {
		return UnidadeFederativaEnum.listAll();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.managedbeans.AbstractCRUDManagedBean#
	 * criarInstanciaPadraoModelo()
	 */
	@Override
	protected Conta criarInstanciaPadraoModelo() {
		Conta conta = super.criarInstanciaPadraoModelo();
		conta.setFlagTipoConta(getTipoConta());
		return conta;
	}

	public String carregarCRUD(String codTipo) {
		tipoConta = TipoContaEnum.getTipo(codTipo);
		return super.carregarCRUD();
	}

	/**
	 * @return
	 */
	protected TipoContaEnum getTipoConta() {
		return tipoConta;
	}

	/**
	 * 
	 */
	public void setContaRelacionada(ActionEvent event) {
		getModeloEdicao().setConta(contaRelacionavelSelecionada);
	}

	public LazyDataModel<Conta> getContasRelacionaveisDataProvider() {
		return contasRelacionaveisDataProvider;
	}

	/**
	 * @return the contaRelacionavelSelecionada
	 */
	public Conta getContaRelacionavelSelecionada() {
		return contaRelacionavelSelecionada;
	}

	/**
	 * @param contaRelacionavelSelecionada the contaRelacionavelSelecionada to
	 * set
	 */
	public void setContaRelacionavelSelecionada(
			Conta contaRelacionavelSelecionada) {
		this.contaRelacionavelSelecionada = contaRelacionavelSelecionada;
	}

}
